"""
BER codec en-/decoders FOR MMS
"""

from .tags import ASN_Tags_MMS
from scapy.asn1.ber import BERcodec_SEQUENCE, BERcodec_INTEGER, BERcodec_ISO646_STRING, BERcodec_BIT_STRING, \
    BERcodec_NULL, BERcodec_BOOLEAN, BERcodec_STRING, BERcodec_UTF8_STRING


class BER_CODEC_CONFIRMED_REQUEST_PDU(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.CONFIRMED_REQUEST_PDU


class BERcodec_UNCONFIRMED_PDU(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.UNCONFIRMED_PDU


class BER_CODEC_INITIATE_REQUEST_PDU(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.INITIATE_REQUEST_PDU


class BER_CODEC_INITIATE_RESPONSE_PDU(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.INITIATE_RESPONSE_PDU


# UnconfirmedService
class BERcodec_INFORMATION_REPORT(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.INFORMATION_REPORT

# InformationReport


class BERcodec_INFORMATION_REPORT_LIST_OF_ACCESS_RESULT(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.INFORMATION_REPORT_LIST_OF_ACCESS_RESULT


class BER_CODEC_GET_NAME_LIST_REQUEST(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.GET_NAME_LIST_REQUEST


class BER_CODEC_READ_REQUEST(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.READ_REQUEST


class BER_CODEC_WRITE_REQUEST(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.WRITE_REQUEST


class BER_CODEC_VMD_SPECIFIC(BERcodec_ISO646_STRING):
    tag = ASN_Tags_MMS.VMD_SPECIFIC


class BER_CODEC_DOMAIN_SPECIFIC(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.DOMAIN_SPECIFIC


class BER_CODEC_AA_SPECIFIC(BERcodec_ISO646_STRING):
    tag = ASN_Tags_MMS.AA_SPECIFIC


class BER_CODEC_LOCAL_DETAIL_CALLING(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.LOCAL_DETAIL_CALLING


class BER_CODEC_PROPOSED_MAX_SERV_OUTSTANDING_CALLING(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.PROPOSED_MAX_SERV_OUTSTANDING_CALLING


class BER_CODEC_PROPOSED_MAX_SERV_OUTSTANDING_CALLED(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.PROPOSED_MAX_SERV_OUTSTANDING_CALLED


class BER_CODEC_PROPOSED_DATA_STRUCTURE_NESTING_LEVEL(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.PROPOSED_DATA_STRUCTURE_NESTING_LEVEL


class BER_CODEC_MMS_INIT_REQUEST_DETAIL(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.MMS_INIT_REQUEST_DETAIL


class BER_CODEC_PROPOSED_VERSION_NUMBER(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.PROPOSED_VERSION_NUMBER


class BER_CODEC_PROPOSED_PARAMETER_CBB(BERcodec_BIT_STRING):
    tag = ASN_Tags_MMS.PROPOSED_PARAMETER_CBB


class BER_CODEC_SERVICES_SUPPORTED_CALLING(BERcodec_BIT_STRING):
    tag = ASN_Tags_MMS.SERVICES_SUPPORTED_CALLING


class BER_CODEC_LOCAL_DETAIL_CALLED(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.LOCAL_DETAIL_CALLED


class BER_CODEC_NEGOTIATED_MAX_SERV_OUTSTANDING_CALLING(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.NEGOTIATED_MAX_SERV_OUTSTANDING_CALLING


class BER_CODEC_NEGOTIATED_MAX_SERV_OUTSTANDING_CALLED(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.NEGOTIATED_MAX_SERV_OUTSTANDING_CALLED


class BER_CODEC_NEGOTIATED_DATA_STRUCTURE_NESTING_LEVEL(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.NEGOTIATED_DATA_STRUCTURE_NESTING_LEVEL


class BER_CODEC_MMS_INIT_RESPONSE_DETAIL(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.MMS_INIT_RESPONSE_DETAIL


class BER_CODEC_NEGOTIATED_VERSION_NUMBER(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.NEGOTIATED_VERSION_NUMBER


class BER_CODEC_NEGOTIATED_PARAMETER_CBB(BERcodec_BIT_STRING):
    tag = ASN_Tags_MMS.NEGOTIATED_PARAMETER_CBB


class BER_CODEC_SERVICES_SUPPORTED_CALLED(BERcodec_BIT_STRING):
    tag = ASN_Tags_MMS.SERVICES_SUPPORTED_CALLED


class BER_CODEC_VMD_STATE(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.VMD_STATE


class BER_CODEC_OBJECT_CLASS(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.OBJECT_CLASS


class BER_CODEC_OBJECT_SCOPE(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.OBJECT_SCOPE


class BER_CODEC_OBJECT_SCOPE_VMD_SPECIFIC(BERcodec_NULL):
    tag = ASN_Tags_MMS.OBJECT_SCOPE_VMD_SPECIFIC


class BER_CODEC_OBJECT_SCOPE_DOMAIN_SPECIFIC(BERcodec_ISO646_STRING):
    tag = ASN_Tags_MMS.OBJECT_SCOPE_DOMAIN_SPECIFIC


class BER_CODEC_OBJECT_SCOPE_AA_SPECIFIC(BERcodec_NULL):
    tag = ASN_Tags_MMS.OBJECT_SCOPE_AA_SPECIFIC


class BER_CODEC_BASIC_OBJECT_CLASS(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.BASIC_OBJECT_CLASS


class BER_CODEC_TYPE_SPECIFICATION_MMS_STRING(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.TYPE_SPECIFICATION_MMS_STRING


class BER_CODEC_READ_REQUEST_SPECIFICATION_WITH_RESULT(BERcodec_BOOLEAN):
    tag = ASN_Tags_MMS.READ_REQUEST_SPECIFICATION_WITH_RESULT


class BER_CODEC_READ_REQUEST_VARIABLE_ACCESS_SPECIFICATION(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.READ_REQUEST_VARIABLE_ACCESS_SPECIFICATION


class BER_CODEC_LIST_OF_DATA(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.LIST_OF_DATA


class BER_CODEC_NAME(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.NAME


class BERcodec_DATA_ARRAY(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.DATA_TYPE_ARRAY


class BERcodec_DATA_STRUCTURE(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.DATA_TYPE_STRUCTURE


class BER_CODEC_DATA_TYPE_BOOLEAN_(BERcodec_BOOLEAN):
    tag = ASN_Tags_MMS.DATA_TYPE_BOOLEAN_


class BER_CODEC_DATA_TYPE_BIT_STRING(BERcodec_BIT_STRING):
    tag = ASN_Tags_MMS.DATA_TYPE_BIT_STRING


class BER_CODEC_DATA_TYPE_INTEGER(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.DATA_TYPE_INTEGER


class BER_CODEC_DATA_TYPE_UNSIGNED(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.DATA_TYPE_UNSIGNED


class BER_CODEC_DATA_TYPE_FLOATING_POINT(BERcodec_STRING):
    tag = ASN_Tags_MMS.DATA_TYPE_FLOATING_POINT


class BER_CODEC_DATA_TYPE_OCTET_STRING(BERcodec_STRING):
    tag = ASN_Tags_MMS.DATA_TYPE_OCTET_STRING


class BER_CODEC_DATA_TYPE_VISIBLE_STRING(BERcodec_ISO646_STRING):
    tag = ASN_Tags_MMS.DATA_TYPE_VISIBLE_STRING


class BER_CODEC_DATA_TYPE_BINARY_TIME(BERcodec_STRING):
    tag = ASN_Tags_MMS.DATA_TYPE_BINARY_TIME


class BER_CODEC_DATA_TYPE_MMS_STRING(BERcodec_UTF8_STRING):
    tag = ASN_Tags_MMS.DATA_TYPE_MMS_STRING


class BER_CODEC_DATA_TYPE_UTC_TIME(BERcodec_STRING):
    tag = ASN_Tags_MMS.DATA_TYPE_UTC_TIME


class BER_CODEC_LIST_OF_VARIABLES(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.VARIABLE_ACCESS_SPECIFICATION_LIST_OF_VARIABLE


class BER_CODEC_VARIABLES_LIST_NAMES(BERcodec_SEQUENCE):
    tag = ASN_Tags_MMS.VARIABLE_ACCESS_SPECIFICATION_VARIABLE_LIST_NAME

# AccessResult


class BERcodec_FAILURE(BERcodec_INTEGER):
    tag = ASN_Tags_MMS.FAILURE
